package com.leetao.netty.handler;

import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;

/**
 * NettyHandler
 * @author 菅江晖
 * @date 2021/4/15 - 18:14
 */
public interface ChannelHandler {

    /**
     * 已连接
     * @param ctx 通道处理器
     */
    void connected(ChannelHandlerContext ctx);

    /**
     * 初始化
     * @param ctx 通道处理器
     * @param fullRequest fullRequest（第一次请求）
     */
    void init(ChannelHandlerContext ctx, FullHttpRequest fullRequest);

    /**
     * 出现异常
     * @param ctx 通道处理器
     * @param cause 异常
     */
    void exception(ChannelHandlerContext ctx, Throwable cause);

    /**
     * 接受消息
     * @param ctx 通道处理器
     * @param msg 消息
     */
    void message(ChannelHandlerContext ctx, TextWebSocketFrame msg);

    /**
     * 断开连接
     * @param ctx 通道处理器
     */
    void disconnected(ChannelHandlerContext ctx);

    /**
     * 关闭连接
     * @param ctx 通道处理器
     */
    void close(ChannelHandlerContext ctx);

    /**
     * 发送消息
     * @param c c
     * @param msg msg
     */
    default void send(Channel c,String msg) {
        c.writeAndFlush(new TextWebSocketFrame(msg));
    }


}

